//package gew.services;
//
//import gew.beans.DataFacade2;
//import gew.data.DimensionValue;
//import gew.metadata.Queries;
//import gew.sql.SqlTemplates;
//import gew.utils.SqlUtils;
//import java.sql.Connection;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.sql.Statement;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Locale;
//import java.util.logging.Level;
//import java.util.logging.Logger;
//
//public class DimensionService {
//    
//    // <editor-fold defaultstate="collapsed" desc="private">
//    
//    private final static HashMap<Queries, HashMap<Locale, HashMap<Integer, DimensionValue>>> dimById;
//    private final static HashMap<Queries, HashMap<Locale, HashMap<String, DimensionValue>>> dimByUrlCode;
//
//    static {
//        dimById = new HashMap();
//        dimByUrlCode = new HashMap();
//        initMap(LocaleService.getLocaleEN(), Queries.CommodityGroupTypeDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.CommodityGroupTypeDimensionValue);
//        initMap(LocaleService.getLocaleEN(), Queries.CommodityDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.CommodityDimensionValue);
//        initMap(LocaleService.getLocaleEN(), Queries.PeriodDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.PeriodDimensionValue);
//        initMap(LocaleService.getLocaleEN(), Queries.CountryDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.CountryDimensionValue);
//        initMap(LocaleService.getLocaleEN(), Queries.TradeFlowDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.TradeFlowDimensionValue);
//        initMap(LocaleService.getLocaleEN(), Queries.IndicatorDimensionValue);
//        initMap(LocaleService.getLocaleRU(), Queries.IndicatorDimensionValue);
//    }
//
//    private static void initMap(Locale locale, Queries queryType) {
//        List<DimensionValue> items = getDimensionValues(locale, queryType);
//        if (!dimById.containsKey(queryType)) {
//            dimById.put(queryType, new HashMap());
//        }
//        dimById.get(queryType).put(locale, new HashMap());
//        if (!dimByUrlCode.containsKey(queryType)) {
//            dimByUrlCode.put(queryType, new HashMap());
//        }
//        dimByUrlCode.get(queryType).put(locale, new HashMap());
//        for (Integer i = 0; i < items.size(); i++) {
//            if (items.get(i).getId() != 0) {
//                dimById.get(queryType).get(locale).put(items.get(i).getId(), items.get(i));
//                dimByUrlCode.get(queryType).get(locale).put(items.get(i).getUrlCode(), items.get(i));
//            }
//        }
//    }
//
//    private static ArrayList<DimensionValue> getDimensionValues(Locale locale, Queries queryType) {
//        String q1 = SqlUtils.EMPTY;
//        switch (queryType) {
//            case CommodityDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_COMMODITY);
//                break;
//            case CommodityGroupTypeDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_COMMODITY_GROUP_TYPE);
//                break;
//            case CountryDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_COUNTRY);
//                break;
//            case IndicatorDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_INDICATOR);
//                break;
//            case PeriodDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_PERIOD);
//                break;
//            case TradeFlowDimensionValue:
//                q1 = SqlTemplates.getSql(SqlTemplates.DIMENSION_TRADE_FLOW);
//                break;
//        }
//        q1 = q1.replace("@locale@", locale.getLanguage());
//        ArrayList<DimensionValue> list = new ArrayList<>();
//        Connection conn = DataFacade2.getDBConnection();
//        try {
//            Statement st = conn.createStatement();
//            ResultSet rs = st.executeQuery(q1);
//            while (rs.next()) {
//                list.add(new DimensionValue(rs));
//            }
//        } catch (Exception e) {
//            Logger.getLogger(DataFacade2.class.getName()).log(Level.SEVERE, e.getMessage());
//            Logger.getLogger(DataFacade2.class.getName()).log(Level.SEVERE, q1);
//            System.out.println(e.getMessage());
//        } finally {
//            if (conn != null) {
//                try {
//                    conn.close();
//                } catch (SQLException ex) {
//                    Logger.getLogger(DataFacade2.class.getName()).log(Level.SEVERE, null, ex);
//                }
//            }
//        }
//        return list;
//    }
//
//    // </editor-fold>
//    
//    public static List<Integer> getIdByUrlCode(Locale locale, String urlCode, Queries queryType) {
//        List<Integer> result = new ArrayList();
//        String[] codes = urlCode.split(SqlUtils.HYPHEN);
//        for (Integer i = 0; i < codes.length; i++) {
//            if (dimByUrlCode.get(queryType).get(locale).containsKey(codes[i])) {
//                result.add(dimByUrlCode.get(queryType).get(locale).get(codes[i]).getId());
//            }
//        }
//        return result;
//    }
//    
//    public static List<DimensionValue> getSelectedValues(List<Integer> ids, Locale locale, Queries queryType) {
//        List<DimensionValue> result = new ArrayList();
//        for (Integer i = 0; i < ids.size(); i++) {
//            result.add(dimById.get(queryType).get(locale).get(ids.get(i)));
//        }
//        return result;
//    }
//    
//    public static String getUomById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getUom();
//    }
//    
//    public static String getAllNamesGen(Queries queryType, List<Integer> ids, Locale locale) {
//        return getAllNamesGen(queryType, ids, locale, SqlUtils.COMMA.concat(SqlUtils.SPACE));
//    }
//    
//    private static String getAllNamesGen(Queries queryType, List<Integer> ids, Locale locale, String separator) {
//        List<String> names = new ArrayList<>();
//        for (Integer i = 0; i < ids.size(); i++) {
//            names.add(dimById.get(queryType).get(locale).get(ids.get(i)).getNameGen());
//        }
//        return String.join(separator, names);
//    }
//    
//    public static String getNameById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getName();
//    }
//
//    public static String getAllKeyWords(Queries queryType, List<Integer> ids, Locale locale) {
//        return getAllKeyWords(queryType, ids, locale, SqlUtils.COMMA.concat(SqlUtils.SPACE));
//    }
//    
//    private static String getAllKeyWords(Queries queryType, List<Integer> ids, Locale locale, String separator) {
//        List<String> keyWords = new ArrayList<>();
//        for (Integer i = 0; i < ids.size(); i++) {
//            keyWords.add(dimById.get(queryType).get(locale).getOrDefault(ids.get(i), DimensionValue.NOT_FOUND).getKeyWords());
//        }
//        return String.join(separator, keyWords);
//    }
//
//    public static Collection<DimensionValue> getAllValues(Locale locale, Queries queryType) {
//        return dimById.get(queryType).get(locale).values();
//    }
//    
//    public static String getAllNames(Queries queryType, List<Integer> ids, Locale locale) {
//        return getAllNames(queryType, ids, locale, SqlUtils.COMMA.concat(SqlUtils.SPACE));
//    }
//    
//    public static String getAllNames(Queries queryType, List<Integer> ids, Locale locale, String separator) {
//        List<String> names = new ArrayList<>();
//        for (Integer i = 0; i < ids.size(); i++) {
//            names.add(dimById.get(queryType).get(locale).get(ids.get(i)).getName());
//        }
//        return String.join(separator, names);
//    }
//    
//    public static String getAllNamesAcc(Queries queryType, List<Integer> ids, Locale locale) {
//        return getAllNamesAcc(queryType, ids, locale, SqlUtils.COMMA.concat(SqlUtils.SPACE));
//    }
//    
//    public static String getAllNamesAcc(Queries queryType, List<Integer> ids, Locale locale, String separator) {
//        List<String> names = new ArrayList<>();
//        for (Integer i = 0; i < ids.size(); i++) {
//            names.add(dimById.get(queryType).get(locale).get(ids.get(i)).getNameAcc());
//        }
//        return String.join(separator, names);
//    }
//
//    public static String getAllCodesAndNames(Queries queryType, List<Integer> ids, Locale locale) {
//        return getAllCodesAndNames(queryType, ids, locale, SqlUtils.COMMA.concat(SqlUtils.SPACE));
//    }
//    
//    public static String getAllCodesAndNames(Queries queryType, List<Integer> ids, Locale locale, String separator) {
//        List<String> names = new ArrayList<>();
//        for (Integer i = 0; i < ids.size(); i++) {
//            DimensionValue item = dimById.get(queryType).get(locale).get(ids.get(i));
//            names.add(SqlUtils.BRACKET_LEFT
//                    .concat(item.getCode())
//                    .concat(SqlUtils.BRACKET_RIGHT)
//                    .concat(item.getName()));
//        }
//        return String.join(separator, names);
//    }
//
//    public static String getNameGenetivusById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getNameGen();
//    }
//    
//    public static String getFontAwesomeById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getFontAwesome();
//    }
//    
//    public static String getKeyWordsById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getKeyWords();
//    }
//    
//    public static String getCodeById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getCode();
//    }
//    
//    public static String getUrlCodeById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getUrlCode();
//    }
//    
//    public static String getDescriptionById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getDescription();
//    }
//    
//    public static String getColorById(Queries queryType, Integer id, Locale locale) {
//        return dimById.get(queryType).get(locale).getOrDefault(id, DimensionValue.NOT_FOUND).getColor();
//    }
//    
//}
